<?php

namespace app\admin\controller\sta\batch;

use app\admin\model\Depot;
use app\admin\model\Factory;
use app\common\controller\Backend;
use think\Db;
use think\exception\DbException;
use think\response\Json;

/**
 * 批次成本汇总表2
 *
 * @icon fa fa-circle-o
 */
class Costqtr extends Backend
{

    /**
     * Costqtr模型对象
     * @var \app\admin\model\sta\batch\Costqtr
     */
    protected $model = null;

    public function _initialize()
    {
        parent::_initialize();
        $this->model = new \app\admin\model\sta\batch\Costqtr;
        $this->view->assign("statusList", $this->model->getStatusList());
    }


    //  3.1     总经理、总裁办看到的报表推送为汇总后的单批次成本数据	- 不明

    /**
     * 查看
     *
     * @return string|Json
     * @throws \think\Exception
     * @throws DbException
     */
    public function index()
    {
        //   全部批次为行,  条件是:   批次有出栏

//  TODO:  功能完成后, 需要改为: 查询完成上月的数据后,记录存到表 xxx, 并锁定数据不可修改
//  TODO:  查询条件:  月份,当月可修改;  (可能还会按厂区拆分)
        $infoModel = new \app\admin\model\Batch;
        //  计算月份      *
        //   todo   需要改成可选月份
        //   查询本月数据是随动的,单条记录不可修改.  查询上月数据是已存到表 sta_material 的, 查询当月是即时的
        //   todo    $newdate  需要做成用户选择
        $newdate = date("Y-m-01");          // 月初       todo
        $newdate_31 = date("Y-m-d", strtotime("+1 month", strtotime($newdate) )  );    // 月底
        // 汇总月份
        $this->view->assign("mark", date("ym", strtotime($newdate) )."月" );

        //设置过滤方法
        $this->request->filter(['strip_tags', 'trim']);
        if (false === $this->request->isAjax()) {
            return $this->view->fetch();
        }
        [$where, $sort, $order, $offset, $limit] = $this->buildparams();
        // 关联表查询
        $depotList = Depot::getList();
        $factoryList = Factory::getList();
        //$mcategoryList = Mcategory::getList();

//print_r($where);die;
        //  数据行:  物料信息,id 即是  m_info.id
        $list = $infoModel->where($where)
            ->field("*, name as  batch ")
            ->order("id ASC")
            ->paginate($limit);
//echo Db::getLastSql();die;
        foreach($list as &$val){
            //$val['depot_id'] = $depotList[$val['depot_id']];
            $val['factory_id'] = $factoryList[$val['factory_id']];

            // 计算月份
            $val['createtime'] = $newdate;           //  todo
        }

        // TODO:  如果计算合计,  那么要按当前筛选条件, 进行`不分页` 计算
//print_r($list);die;
        // TODO:  采集对应数据

        // 物料-饲料-id
        // 物料-药品-id
        $siliao_i = Db::name("m_info")->where("mmaterial_id",'in', [1,2] )->field("id")->select();
        $siliao_id =  array_keys( array_column($siliao_i, null, 'id') ) ;
        #$siliao_id = implode(",", array_keys( array_column($siliao_i, null, 'id') ) );

        $yaopin_i = Db::name("m_info")->where("mmaterial_id",'in', [4] )->field("id, name")->select();
        $yaopin_id =  array_keys( array_column($yaopin_i, null, 'id') ) ;
        #$yaopin_id = implode(",", array_keys( array_column($yaopin_i, null, 'id') ) );

//print_r($siliao_id);die;
        foreach($list as &$val){
            $pro_out = Db::name("pro_out")
                ->where(['batch_id'=> $val['id'], 'status'=>'已通过' ])
                ->find();
            $pro_light = Db::name("pro_light")
                ->where(['batch_id'=> $val['id'], 'status'=>'已通过' ])
                ->find();


            $siliao =  Db::name("m_apply")
                ->field("*, sum(num) as bill_num ")
                ->where('batch_id' , 'eq' , $val['id'] )
                ->where('info_id', 'in' , $siliao_id )
                ->where('status', 'eq', '已通过'  )
                ->find();

            $yaopin =  Db::name("m_apply")
                ->field("*, sum(num) as bill_num ")
                ->where('batch_id' , 'eq' , $val['id'] )
                ->where('info_id', 'in' , $yaopin_id )
                ->where('status', 'eq', '已通过'  )
                ->find();

//echo Db::getLastSql();die;
//print_r($siliao);die;
//            $bill_allot = Db::name("m_stockbill")
//                ->field("sum(nums) as bill_num, sum(total_price) as bill_total ")
//                ->where(['info_id'=> $val['id'], 'type'=>'调拨', 'status'=>'已通过' ])
//                ->where('newdate' , 'between', [ $newdate, $newdate_31 ] )
//                ->find();
//
//            $lingyong = Db::name("m_apply")
//                ->field("sum(num) as bill_num ")
//                ->where(['info_id'=> $val['id'], 'status'=>'已通过' ])
//                ->where('createtime' , 'between', [ $newdate, $newdate_31 ] )
//                ->find();
            //echo Db::getLastSql();die;
            // 物料单价,  @wtt   当月录入的价格
            // TODO  次月价格变更后 (加权平均...) ,   重新录入一组数据,
            //  (每月显示一组库存数据, 不叠加上月的数据.  每月结算后,创建下月的一组数据. )

//            $lingyong_unit = Db::name("m_stock")
//                ->field("info_id, price")
//                ->where(['status'=> '已通过' ])
//                ->where('createtime' , 'between', [ $newdate, $newdate_31 ] )
//                ->select();
//            $lingyong_unit = array_column($lingyong_unit, "price", "info_id");


            //print_r($lingyong_unit);die;
//echo Db::getLastSql();die;
            //  TODO  重要  这里暂时没计算加权平均
            $val['a'] = $pro_out ? $pro_out['num'] : 0 ;              // 出栏总数
            $val['b'] = $siliao ? $siliao['bill_num'] * 100 : 0 ;     // 批次饲料费用     todo 寻找单价
            $val['c'] = $yaopin ? $yaopin['bill_num'] * 100 : 0 ;      // 批次药品费用    todo 寻找药品单价

            $val['d'] = 0;   // 水电费用（元）
            $val['e'] = 0;   // 维修维护费用（元）
            $val['f'] = 0;   // 工资（元）
            $val['g'] = 0;   // 生活费用（元）

            $val['h'] = $pro_light ? $pro_light['zhongtu_update'] * 100 : 0 ;   // 种兔更新费用  todo 寻找种兔单价

            $val['i'] = $val['b'] + $val['c'] + $val['d'] + $val['e'] + $val['f'] + $val['g'] + $val['h'];      // 合计费用

            $val['j'] = $val['a'] ? my_divide($val['i'] , $val['a'], 2) : 0 ;         // 出栏只均成本

            $val['k'] = $pro_out ? $pro_out['every'] : 0;               // 出栏均重

            $val['l'] = my_divide($val['i'] , $val['k']) ;     // 斤成本

            $val['m'] = 0;      // 料肉比

            //  出栏数- 种兔更新数
            $a_z = $val['a'] - ( $pro_light?$pro_light['zhongtu_update']:0 ) ;
            $val['n'] = $a_z >= 0 ? my_divide(($val['i']-$val['h']) , $a_z) : 'x'  ;   // 不含种兔更新的只均成本         todo 出栏种兔是否包括 种兔更新数 ?

            $val['o'] =  my_divide( ($val['i']-$val['h']) , $val['k'] ) ;   // 不含种兔更新的斤成本

            $val['p'] = 0;   // 单只人工成本

        }

        $result = ['total' => $list->total(), 'rows' => $list->items()];
        return json($result);
    }



}
